home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d882.lha / GALer / GALer_english / Source / GALerSrcE.lha / GALer.c < prev    next >
C/C++ Source or Header  |  1993-03-28  |  25KB  |  884 lines

  1. /****************************************************************/
  2. /*                                */
  3. /* GAL-Software                            */
  4. /*                                */
  5. /* Soft- and Hardware is copyright (c) 1991            */
  6. /*     by Christian Habermann                    */
  7. /*        Asamstr. 17                        */
  8. /*        W-8050 Freising (Germany)                */
  9. /*                                */
  10. /* This is Version 1.4 of GALer.                */
  11. /*                                */
  12. /* History:                            */
  13. /*    V1.0:   Testversion                    */
  14. /*    V1.1:   Intuition environment added            */
  15. /*    V1.2:   some errors fixed                */
  16. /*    V1.3:   some errors fixed                */
  17. /*    V1.4:    new environment and support of A and B-GALs    */
  18. /*                                */
  19. /* Compiler:    Aztec 3.6a                    */
  20. /*                                */
  21. /* compilieren: cc GALer.c                    */
  22. /*        cc sub.c                    */
  23. /*        cc jedec.c                    */
  24. /*        cc pruefer.c                    */
  25. /*        cc GAL.c                    */
  26. /*        cc GALasm.c                    */
  27. /*        cc Reasm.c                    */
  28. /*        cc Optimizer.c                    */
  29. /*        as -n -c -d port.asm                */
  30. /*        as -n -c -d reqglue.asm                */
  31. /* linken     : ln GALer.o Sub.o Port.o Jedec.o Pruefer.o GAL.o */
  32. /*           GAL2.o GALasm.o Reasm.o Optimizer.o        */
  33. /*           reqglue.o -lc                */
  34. /*                                */
  35. /* Sorry for the German comments - but I was too lazzy to    */
  36. /* translate them.                        */
  37. /* Source of GAL2.c is not included!                */
  38. /****************************************************************/
  39.  
  40. #include <devices/parallel.h>
  41. #include <exec/io.h>
  42. #include <exec/memory.h>
  43. #include <exec/ports.h>
  44. #include <exec/types.h>
  45. #include <graphics/gfxbase.h>
  46. #include <graphics/text.h>
  47. #include <intuition/intuition.h>
  48. #include <libraries/dosextens.h>
  49. #include <functions.h>
  50.  
  51. #include "GALer.h"
  52. #include "reqbase.h"
  53.  
  54.  
  55.  
  56. #define        Menu_1        0
  57. #define        Menu_2        1
  58. #define        Menu_3        2
  59. #define        Menu_4        3
  60. #define        Menu_5        4
  61. #define        Menu_6        5
  62.  
  63. #define        Item_1        0
  64. #define        Item_2        1
  65. #define        Item_3        2
  66. #define        Item_4        3
  67. #define        Item_5        4
  68. #define        Item_6        5
  69. #define        Item_7        6
  70. #define        Item_8        7
  71. #define        Item_9        8
  72.  
  73.  
  74.  
  75. extern    struct    ReqFileRequester    MyFileReqStruct;
  76.  
  77.  
  78. struct    IORequest    *CreateExtIO();
  79. struct    IntuitionBase    *IntuitionBase;
  80. struct    ReqLib        *ReqBase;
  81. struct    GfxBase        *GfxBase;
  82. struct    IntuiMessage    *message;
  83. struct    Screen        *screen;
  84. struct    Window        *window,*old_ReqWin;
  85. struct    MsgPort        *timeport, *parport;
  86. struct    timerequest    *timereq;
  87. struct    IOExtPar    *parreq;
  88. struct    TextFont    *txtfont;
  89. struct    TextAttr    txtattr;
  90.  
  91.  
  92.  
  93. UWORD    MyColors[4]={0xAAA,0x000,0xFFF,0x688};
  94.  
  95. SHORT    vector3a[] = { 0,255,639,255,639,205 };
  96. SHORT    vector3b[] = { 0,255,0,205,639,205 };
  97.  
  98. SHORT    vector2a[] = { 30,195,610,195,610,160 };
  99. SHORT    vector2b[] = { 30,195,30,160,610,160 };
  100.  
  101. SHORT    vector1a[] = { 0,199,639,199,639,11 };
  102. SHORT    vector1b[] = { 0,199,0,11,639,11 };
  103.  
  104.  
  105. struct Border    border3b = { 0,0,2,3,JAM1,3,(SHORT *)vector3b,NULL };
  106. struct Border    border3a = { 0,0,1,3,JAM1,3,(SHORT *)vector3a,&border3b };
  107. struct Border    border2b = { 0,0,2,3,JAM1,3,(SHORT *)vector2b,&border3a };
  108. struct Border    border2a = { 0,0,1,3,JAM1,3,(SHORT *)vector2a,&border2b };
  109. struct Border    border1b = { 0,0,2,3,JAM1,3,(SHORT *)vector1b,&border2a };
  110. struct Border    border1a = { 0,0,1,3,JAM1,3,(SHORT *)vector1a,&border1b };
  111.  
  112.  
  113. UBYTE  title[] = "GALer V1.4  (c) 1993 by Christian Habermann                GAL16V8  ";
  114.  
  115.  
  116. struct IntuiText MIText1a = {0,1,JAM1,0,1,NULL,
  117.                  (UBYTE *)"Show pinnames",NULL};
  118.  
  119. struct IntuiText MIText1b = {0,1,JAM1,0,1,NULL,
  120.                  (UBYTE *)"Clear pinnames",NULL};
  121.  
  122. struct IntuiText MIText1d = {0,1,JAM1,0,1,NULL,
  123.                  (UBYTE *)"Optimizer",NULL};
  124.  
  125. struct IntuiText MIText1c = {0,1,JAM1,0,1,NULL,
  126.                 (UBYTE *)"GAL-Checker",NULL};
  127.  
  128.  
  129. struct IntuiText MIText3c = {0,1,JAM1,0,1,NULL,
  130.                     (UBYTE *)"Reassembler",NULL};
  131.  
  132. struct IntuiText MIText3b = {0,1,JAM1,0,1,NULL,
  133.                     (UBYTE *)"JEDEC-file parameter",NULL};
  134.  
  135. struct IntuiText MIText3  = {0,1,JAM1,0,1,NULL,
  136.                     (UBYTE *)"Generate JEDEC-file",NULL};
  137.  
  138. struct IntuiText MIText3a = {0,1,JAM1,0,1,NULL,
  139.                     (UBYTE *)"GAL-Info",NULL};
  140.  
  141. struct IntuiText MIText4b = {0,1,JAM1,0,1,NULL,
  142.                  (UBYTE *)"Read ACW",NULL};
  143.  
  144. struct IntuiText MIText4  = {0,1,JAM1,0,1,NULL,
  145.                  (UBYTE *)"Read signature",NULL};
  146.  
  147. struct IntuiText MIText5  = {0,1,JAM1,0,1,NULL,
  148.                  (UBYTE *)"Assemble file",NULL};
  149.  
  150. struct IntuiText MIText8  = {0,1,JAM1,0,1,NULL,
  151.                  (UBYTE *)"Set security bit",NULL};
  152.  
  153. struct IntuiText MIText8b = {0,1,JAM1,0,1,NULL,
  154.                  (UBYTE *)"Write access",NULL};
  155.  
  156. struct IntuiText MIText8a = {0,1,JAM1,0,1,NULL,
  157.                  (UBYTE *)"Test security bit",NULL};
  158.  
  159. struct IntuiText MIText9  = {0,1,JAM1,0,1,NULL,
  160.                  (UBYTE *)"Blank test",NULL};
  161.  
  162. struct IntuiText MIText9a = {0,1,JAM1,0,1,NULL,
  163.                  (UBYTE *)"Compare",NULL};
  164.  
  165. struct IntuiText MIText10 = {0,1,JAM1,0,1,NULL,
  166.                  (UBYTE *)"Copy",NULL};
  167.  
  168. struct IntuiText MIText11 = {0,1,JAM1,0,1,NULL,
  169.                  (UBYTE *)"Program",NULL};
  170.  
  171. struct IntuiText MIText12 = {0,1,JAM1,0,1,NULL,
  172.                  (UBYTE *)"Erase",NULL};
  173.  
  174. struct IntuiText MIText21 = {0,1,JAM1,20,1,NULL,
  175.                  (UBYTE *)"A-Type",NULL};
  176.  
  177. struct IntuiText MIText20a= {0,1,JAM1,20,1,NULL,
  178.                  (UBYTE *)"Auto-A-Type",NULL};
  179.  
  180. struct IntuiText MIText20 = {0,1,JAM1,20,1,NULL,
  181.                  (UBYTE *)"Type-Requester",NULL};
  182.  
  183. struct IntuiText MIText13 = {0,1,JAM1,20,1,NULL,
  184.                  (UBYTE *)"GAL20V8",NULL};
  185.  
  186. struct IntuiText MIText14 = {0,1,JAM1,20,1,NULL,
  187.                  (UBYTE *)"GAL16V8",NULL};
  188.  
  189. struct IntuiText MIText17 = {0,1,JAM1,0,1,NULL,
  190.                    (UBYTE *)"Quit",NULL};
  191.  
  192. struct IntuiText MIText16 = {0,1,JAM1,0,1,NULL,
  193.                    (UBYTE *)"Save config.",NULL};
  194.  
  195. struct IntuiText MIText15 = {0,1,JAM1,0,1,NULL,
  196.                    (UBYTE *)"About GALer",NULL};
  197.  
  198. struct IntuiText MITextP  = {0,1,JAM1,0,1,NULL,
  199.                    (UBYTE *)"Exit Checker",NULL};
  200.  
  201.  
  202.  
  203. struct MenuItem MenuItem1d= {NULL,0,35,180,10,
  204.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  205.                  0,(APTR)&MIText1d,NULL,'o',NULL,MENUNULL};
  206.  
  207. struct MenuItem MenuItem1c= {&MenuItem1d,0,20,180,10,
  208.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  209.                  0,(APTR)&MIText1c,NULL,'m',NULL,MENUNULL};
  210.  
  211. struct MenuItem MenuItem1b= {&MenuItem1c,0,10,180,10,
  212.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  213.                  0,(APTR)&MIText1b,NULL,'c',NULL,MENUNULL};
  214.  
  215. struct MenuItem MenuItem1a= {&MenuItem1b,0,0,180,10,
  216.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  217.                  0,(APTR)&MIText1a,NULL,'n',NULL,MENUNULL};
  218.  
  219. struct MenuItem MenuItem3c= {NULL,0,60,224,10,
  220.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  221.                  0,(APTR)&MIText3c,NULL,'i',NULL,MENUNULL};
  222.  
  223. struct MenuItem MenuItem3b= {&MenuItem3c,0,45,224,10,
  224.                  ITEMTEXT+ITEMENABLED+HIGHCOMP,
  225.                  0,(APTR)&MIText3b,NULL,0,NULL,MENUNULL};
  226.  
  227. struct MenuItem MenuItem3 = {&MenuItem3b,0,35,224,10,
  228.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  229.                  0,(APTR)&MIText3,NULL,'j',NULL,MENUNULL};
  230.  
  231. struct MenuItem MenuItem3a= {&MenuItem3,0,20,224,10,
  232.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  233.                  0,(APTR)&MIText3a,NULL,'e',NULL,MENUNULL};
  234.  
  235. struct MenuItem MenuItem2b= {&MenuItem3a,0,10,224,10,
  236.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  237.                  0,(APTR)&MIText4b,NULL,'w',NULL,MENUNULL};
  238.  
  239. struct MenuItem MenuItem2 = {&MenuItem2b,0,0,224,10,
  240.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  241.                  0,(APTR)&MIText4,NULL,'r',NULL,MENUNULL};
  242.  
  243. struct MenuItem MenuItem7 = {NULL,0,0,200,10,
  244.                  ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  245.                  0,(APTR)&MIText5,NULL,'a',NULL,MENUNULL};
  246.  
  247.  
  248. struct MenuItem MenuItem12b= {NULL,0,75,182,10,
  249.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  250.                   0,(APTR)&MIText8b,NULL,'d',NULL,MENUNULL};
  251.  
  252. struct MenuItem MenuItem12a= {&MenuItem12b,0,60,182,10,
  253.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  254.                   0,(APTR)&MIText8a,NULL,'v',NULL,MENUNULL};
  255.  
  256. struct MenuItem MenuItem12 = {&MenuItem12a,0,50,182,10,
  257.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  258.                   0,(APTR)&MIText8,NULL,'s',NULL,MENUNULL};
  259.  
  260. struct MenuItem MenuItem11 = {&MenuItem12,0,40,182,10,
  261.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  262.                   0,(APTR)&MIText9,NULL,'t',NULL,MENUNULL};
  263.  
  264. struct MenuItem MenuItem9c = {&MenuItem11,0,30,182,10,
  265.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  266.                   0,(APTR)&MIText9a,NULL,'b',NULL,MENUNULL};
  267.  
  268. struct MenuItem MenuItem8  = {&MenuItem9c,0,20,182,10,
  269.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  270.                   0,(APTR)&MIText12,NULL,'l',NULL,MENUNULL};
  271.  
  272. struct MenuItem MenuItem10 = {&MenuItem8,0,10,182,10,
  273.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  274.                   0,(APTR)&MIText10,NULL,'k',NULL,MENUNULL};
  275.  
  276. struct MenuItem MenuItem9  = {&MenuItem10,0,0,182,10,
  277.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  278.                   0,(APTR)&MIText11,NULL,'p',NULL,MENUNULL};
  279.  
  280. struct MenuItem MenuItem14 = {NULL,0,45,138,10,
  281.                   MENUTOGGLE+CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
  282.                   0,(APTR)&MIText20,NULL,0,NULL,MENUNULL};
  283.  
  284. struct MenuItem MenuItem14a= {&MenuItem14,0,35,138,10,
  285.                   MENUTOGGLE+CHECKIT+ITEMTEXT+ITEMENABLED+HIGHCOMP,
  286.                   0,(APTR)&MIText20a,NULL,0,NULL,MENUNULL};
  287.  
  288. struct MenuItem MenuItem14b= {&MenuItem14a,0,20,138,10,
  289.                   MENUTOGGLE+CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  290.                   0,(APTR)&MIText21,NULL,'3',NULL,MENUNULL};
  291.  
  292. struct MenuItem MenuItem13b= {&MenuItem14b,0,10,138,10,
  293.                   CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  294.                   0xFFE1,(APTR)&MIText13,NULL,'2',NULL,MENUNULL};
  295.  
  296. struct MenuItem MenuItem13 = {&MenuItem13b,0,0,138,10,
  297.                   CHECKIT+ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  298.                   0xFFE2,(APTR)&MIText14,NULL,'1',NULL,MENUNULL};
  299.  
  300. struct MenuItem MenuItem17 = {NULL,0,25,172,10,
  301.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  302.                   0,(APTR)&MIText17,NULL,'q',NULL,MENUNULL};
  303.  
  304. struct MenuItem MenuItem16 = {&MenuItem17,0,10,172,10,
  305.                   ITEMTEXT+ITEMENABLED+HIGHCOMP,
  306.                   0,(APTR)&MIText16,NULL,0,NULL,MENUNULL};
  307.  
  308. struct MenuItem MenuItem15 = {&MenuItem16,0,0,172,10,
  309.                   ITEMTEXT+ITEMENABLED+HIGHCOMP,
  310.                   0,(APTR)&MIText15,NULL,0,NULL,MENUNULL};
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317. struct Menu Menu6 = {NULL,446,0,87,0,MENUENABLED,
  318.              "Tools",&MenuItem1a};
  319.  
  320. struct Menu Menu5 = {&Menu6,304,0,135,0,MENUENABLED,
  321.              "GAL-Disassembler",&MenuItem2};
  322.  
  323. struct Menu Menu4 = {&Menu5,186,0,111,0,MENUENABLED,
  324.              "GAL-Assembler",&MenuItem7};
  325.  
  326. struct Menu Menu3 = {&Menu4,148,0,31,0,MENUENABLED,
  327.              "GAL",&MenuItem9};
  328.  
  329. struct Menu Menu2 = {&Menu3,70,0,71,0,MENUENABLED,
  330.              "GAL-Type",&MenuItem13};
  331.  
  332. struct Menu Menu1 = {&Menu2,0,0,63,0,MENUENABLED,
  333.              "Project",&MenuItem15};
  334.  
  335.  
  336.  
  337. struct MenuItem MenuItemP = {NULL,0,0,175,10,
  338.                   ITEMTEXT+COMMSEQ+ITEMENABLED+HIGHCOMP,
  339.                   0,(APTR)&MITextP,NULL,'x',NULL,MENUNULL};
  340.  
  341. struct Menu MenuP = {NULL,0,0,95,0,MENUENABLED,
  342.              "GAL-Checker",&MenuItemP};
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351. SHORT  BorderVectors1[]  = {0,0,17,0,17,9,0,9,0,0};
  352. struct Border    Border1 = {-1,-1,2,3,JAM1,5,BorderVectors1,NULL};
  353. struct Border    Border2 = {-1,-1,3,3,JAM1,5,BorderVectors1,NULL};
  354.  
  355.  
  356. struct IntuiText IText35 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  357. struct IntuiText IText34 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
  358. struct IntuiText IText33 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  359. struct IntuiText IText32 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
  360. struct IntuiText IText31 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  361. struct IntuiText IText30 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
  362. struct IntuiText IText29 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  363. struct IntuiText IText28 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
  364. struct IntuiText IText27 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  365. struct IntuiText IText26 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
  366. struct IntuiText IText25 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  367. struct IntuiText IText24 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
  368. struct IntuiText IText23 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  369. struct IntuiText IText22 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
  370. struct IntuiText IText21 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  371. struct IntuiText IText20 = {2,0,JAM2,4,0,NULL,(UBYTE *)"O",NULL};
  372.  
  373. struct IntuiText IText13 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  374. struct IntuiText IText12 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  375. struct IntuiText IText11 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  376. struct IntuiText IText10 = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  377. struct IntuiText IText9  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  378. struct IntuiText IText8  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  379. struct IntuiText IText7  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  380. struct IntuiText IText6  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  381. struct IntuiText IText5  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  382. struct IntuiText IText4  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  383.  
  384. struct IntuiText IText1c = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  385. struct IntuiText IText3  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  386. struct IntuiText IText2  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  387. struct IntuiText IText1  = {2,0,JAM2,4,0,NULL,(UBYTE *)"L",NULL};
  388.  
  389.  
  390. struct Gadget    Gadget35= {NULL,382,120,16,8,NULL,
  391.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  392.                 (APTR)&Border2,NULL,&IText35,NULL,NULL,15,NULL};
  393. struct Gadget    Gadget34= {&Gadget35,340,120,16,8,NULL,
  394.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  395.                 (APTR)&Border1,NULL,&IText34,NULL,NULL,30,NULL};
  396. struct Gadget    Gadget33= {&Gadget34,382,110,16,8,NULL,
  397.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  398.                 (APTR)&Border2,NULL,&IText33,NULL,NULL,16,NULL};
  399. struct Gadget    Gadget32= {&Gadget33,340,110,16,8,NULL,
  400.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  401.                 (APTR)&Border1,NULL,&IText32,NULL,NULL,31,NULL};
  402. struct Gadget    Gadget31= {&Gadget32,382,100,16,8,NULL,
  403.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  404.                 (APTR)&Border2,NULL,&IText31,NULL,NULL,17,NULL};
  405. struct Gadget    Gadget30= {&Gadget31,340,100,16,8,NULL,
  406.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  407.                 (APTR)&Border1,NULL,&IText30,NULL,NULL,32,NULL};
  408. struct Gadget    Gadget29= {&Gadget30,382,90,16,8,NULL,
  409.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  410.                 (APTR)&Border2,NULL,&IText29,NULL,NULL,18,NULL};
  411. struct Gadget    Gadget28= {&Gadget29,340,90,16,8,NULL,
  412.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  413.                 (APTR)&Border1,NULL,&IText28,NULL,NULL,33,NULL};
  414. struct Gadget    Gadget27= {&Gadget28,382,80,16,8,NULL,
  415.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  416.                 (APTR)&Border2,NULL,&IText27,NULL,NULL,19,NULL};
  417. struct Gadget    Gadget26= {&Gadget27,340,80,16,8,NULL,
  418.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  419.                 (APTR)&Border1,NULL,&IText26,NULL,NULL,34,NULL};
  420. struct Gadget    Gadget25= {&Gadget26,382,70,16,8,NULL,
  421.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  422.                 (APTR)&Border2,NULL,&IText25,NULL,NULL,20,NULL};
  423. struct Gadget    Gadget24= {&Gadget25,340,70,16,8,NULL,
  424.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  425.                 (APTR)&Border1,NULL,&IText24,NULL,NULL,35,NULL};
  426. struct Gadget    Gadget23= {&Gadget24,382,60,16,8,NULL,
  427.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  428.                 (APTR)&Border2,NULL,&IText23,NULL,NULL,21,NULL};
  429. struct Gadget    Gadget22= {&Gadget23,340,60,16,8,NULL,
  430.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  431.                 (APTR)&Border1,NULL,&IText22,NULL,NULL,36,NULL};
  432. struct Gadget    Gadget21= {&Gadget22,382,50,16,8,NULL,
  433.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  434.                 (APTR)&Border2,NULL,&IText21,NULL,NULL,22,NULL};
  435. struct Gadget    Gadget20= {&Gadget21,340,50,16,8,NULL,
  436.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  437.                 (APTR)&Border1,NULL,&IText20,NULL,NULL,37,NULL};
  438.  
  439. struct Gadget    Gadget13= {&Gadget20,382,130,16,8,NULL,
  440.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  441.                 (APTR)&Border1,NULL,&IText13,NULL,NULL,10,NULL};
  442. struct Gadget    Gadget12= {&Gadget13,242,120,16,8,NULL,
  443.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  444.                 (APTR)&Border1,NULL,&IText12,NULL,NULL,9,NULL};
  445. struct Gadget    Gadget11= {&Gadget12,242,110,16,8,NULL,
  446.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  447.                 (APTR)&Border1,NULL,&IText11,NULL,NULL,8,NULL};
  448. struct Gadget    Gadget10= {&Gadget11,242,100,16,8,NULL,
  449.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  450.                 (APTR)&Border1,NULL,&IText10,NULL,NULL,7,NULL};
  451. struct Gadget    Gadget9 = {&Gadget10,242,90,16,8,NULL,
  452.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  453.                 (APTR)&Border1,NULL,&IText9,NULL,NULL,6,NULL};
  454. struct Gadget    Gadget8 = {&Gadget9,242,80,16,8,NULL,
  455.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  456.                 (APTR)&Border1,NULL,&IText8,NULL,NULL,5,NULL};
  457. struct Gadget    Gadget7 = {&Gadget8,242,70,16,8,NULL,
  458.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  459.                 (APTR)&Border1,NULL,&IText7,NULL,NULL,4,NULL};
  460. struct Gadget    Gadget6 = {&Gadget7,242,60,16,8,NULL,
  461.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  462.                 (APTR)&Border1,NULL,&IText6,NULL,NULL,3,NULL};
  463. struct Gadget    Gadget5 = {&Gadget6,242,50,16,8,NULL,
  464.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  465.                 (APTR)&Border1,NULL,&IText5,NULL,NULL,2,NULL};
  466. struct Gadget    Gadget4 = {&Gadget5,242,40,16,8,NULL,
  467.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  468.                 (APTR)&Border1,NULL,&IText4,NULL,NULL,1,NULL};
  469.  
  470. struct Gadget    Gadget1c= {NULL,382,120,16,8,NULL,
  471.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  472.                 (APTR)&Border1,NULL,&IText1c,NULL,NULL,14,NULL};
  473. struct Gadget    Gadget3 = {&Gadget1c,242,30,16,8,NULL,
  474.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  475.                 (APTR)&Border1,NULL,&IText3,NULL,NULL,13,NULL};
  476. struct Gadget    Gadget2 = {&Gadget3,382,30,16,8,NULL,
  477.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  478.                 (APTR)&Border1,NULL,&IText2,NULL,NULL,12,NULL};
  479. struct Gadget    Gadget1 = {&Gadget2,242,20,16,8,NULL,
  480.                 GADGIMMEDIATE+RELVERIFY,BOOLGADGET,
  481.                 (APTR)&Border1,NULL,&IText1,NULL,NULL,11,NULL};
  482.  
  483.  
  484.  
  485. struct NewScreen MyScreen={ 0,0,640,256,2,2,3,HIRES,CUSTOMSCREEN,&txtattr,
  486.                 (UBYTE *)title,
  487.                 NULL,NULL} ;
  488.  
  489. struct NewWindow MyWindow={ 0,11,640,245,1,2,
  490.                 GADGETUP|MENUPICK|VANILLAKEY,
  491.                 ACTIVATE|BORDERLESS,
  492.                 NULL,NULL,NULL,NULL,NULL,0,0,0,0,CUSTOMSCREEN };
  493.  
  494.  
  495. struct    Process        *myproc;
  496.  
  497. struct    RastPort    *rp;
  498. struct    ViewPort    *vp;
  499.  
  500. int    pruef_mode =    0;
  501.  
  502.  
  503. extern     int        GALType, MaxFuseAdr, SigAdr;
  504.  
  505. extern    struct    Configuration    Config;
  506.  
  507.  
  508.  
  509. main()
  510. {
  511. ULONG    class;
  512. USHORT    code,    gadID;
  513. struct    Gadget    *gad;
  514.  
  515.  
  516.  OpenStuff();                    /*Libs, Windows... öffnen*/
  517.  
  518.  rp = &(screen->RastPort);
  519.  vp = &screen->ViewPort;
  520.  
  521.  LoadRGB4(vp,&MyColors,4L);
  522.  DrawBorder(rp,&border1a,0L,0L);        /*Umrandungen,... zeichnen*/
  523.  
  524.  
  525.  if (GetParPort()) {            /*Druckerport frei?*/
  526.    puts("parallel port is not free!");
  527.    CloseStuff();
  528.    exit(0);
  529.   }
  530.  
  531.  if (GetTimer()) {                /*Timer holen*/
  532.    FreeParPort();
  533.    puts("can't find timer!");
  534.    CloseStuff;
  535.    exit(0);    
  536.   }
  537.  
  538.  
  539.  InitGALer();                    /*Ausgänge von IC3,4,5 auf*/
  540.  EnableOutput();                /*LOW schalten*/
  541.  
  542.  LoadConfig();                    /* Voreinstellung laden */
  543.  
  544.  
  545.  for (;;)  {
  546.    Wait(1L<<window->UserPort->mp_SigBit);
  547.    if (message=(struct IntuiMessage *)GetMsg(window->UserPort)) {
  548.      class = message->Class;
  549.      code  = message->Code;
  550.      if (class == GADGETUP) {
  551.        gad   = (struct Gadget *)message->IAddress;
  552.        gadID = gad->GadgetID; }
  553.      ReplyMsg(message);
  554.  
  555.      switch(class) {
  556.     case MENUPICK:    if (MENUNUM(code) != MENUNULL)
  557.               ExecuteMenu(MENUNUM(code),ITEMNUM(code));      
  558.             break;
  559.     case GADGETUP:    if ((gadID < 100) && (pruef_mode == ON))
  560.               Pruefer(gad,gadID);
  561.             break;
  562.       }
  563.     }
  564.   }
  565.  
  566. }     /*end of main*/
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573. /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
  574. /*                Subroutinen                */
  575. /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
  576.  
  577.  
  578. /*aufgerufenes Menü ausführen*/
  579. void ExecuteMenu(menu,item)
  580. int menu,item;
  581. {
  582.  if (pruef_mode==ON) {
  583.    if ((menu == Menu_1) && (item == Item_1)) TogglePruefer();
  584.   }
  585.  else {
  586.   switch (menu) {
  587.      case Menu_1:                    /*Projekt*/
  588.        switch (item) {
  589.      case Item_1:
  590.        About();
  591.        break;
  592.      case Item_2:
  593.        SaveConfig();
  594.        break;
  595.      case Item_3:
  596.        CloseStuff();
  597.        FreeTimer();
  598.        FreeParPort();
  599.        exit(0);
  600.        break;
  601.     }
  602.        break;
  603.      case Menu_2:                    /*GAL-Typ*/
  604.        switch (item) {
  605.      case Item_1:
  606.         SetGALType(GAL16V8,Config.AType);
  607.         break;
  608.      case Item_2:
  609.         SetGALType(GAL20V8,Config.AType);
  610.         break;
  611.      case Item_3:
  612.         SetGALType(GALType,!Config.AType);
  613.         break;
  614.      case Item_4:
  615.         Config.AutoAType = !Config.AutoAType;
  616.         if (Config.AutoAType)
  617.           MenuItem14b.Flags &= ~ITEMENABLED;     /*A-Typ-Menü*/
  618.         else
  619.           MenuItem14b.Flags |= ITEMENABLED;          /*A-Typ-Menü*/
  620.         break;
  621.      case Item_5:
  622.         Config.GALTypeReq = !Config.GALTypeReq;
  623.         break;
  624.     }
  625.        break;
  626.      case Menu_3:                    /*GAL*/
  627.        switch (item) {
  628.      case Item_1:
  629.        ProgramGAL();                /*programmieren*/
  630.        break;
  631.      case Item_2:                    /*kopieren*/
  632.        CopyGAL();
  633.        break;
  634.      case Item_3:                    /*löschen*/
  635.        Loeschen();
  636.        break;
  637.      case Item_4:                    /*vergleichen*/
  638.        Compare();
  639.        break;
  640.      case Item_5:                    /*Leertest*/
  641.        Leertest();
  642.        break;
  643.      case Item_6:                    /*setze Sec.*/
  644.        SetSecurity(YES);
  645.        break;
  646.      case Item_7:
  647.        TestSecurity();                /*teste Sec.*/
  648.        break;
  649.      case Item_8:
  650.        Schreibverhalten();
  651.        break;
  652.         }
  653.        break;
  654.      case Menu_4:                    /*GAL-Assembler*/
  655.      if (item == Item_1) {
  656.        AssembleInputFile(ASSEMBLER);    /*Eingabe-Datei assemblieren*/
  657.        break;
  658.       }
  659.        break;
  660.      case Menu_5:                    /*GAL-Disassembler*/
  661.        switch (item) {
  662.      case Item_1:
  663.        PrintSignature();
  664.        break;
  665.      case Item_2:
  666.        PrintACW();
  667.        break;
  668.      case Item_3:
  669.        GALInfo();
  670.        break;
  671.      case Item_4:
  672.        PutJedec();
  673.        break;
  674.      case Item_5:
  675.        JedecRequester();
  676.        break;
  677.      case Item_6:
  678.        Reassembler();
  679.        break;
  680.     }
  681.        break;
  682.      case Menu_6:                    /*Tools*/
  683.        switch (item) {
  684.      case Item_1:
  685.        PrintPinNames();
  686.        break;
  687.      case Item_2:
  688.        ClearPinNames();
  689.        break;
  690.      case Item_3:
  691.        TogglePruefer();
  692.        break;
  693.      case Item_4:
  694.        Optimizer();
  695.        break;
  696.     }
  697.     }
  698.   }   
  699. }
  700.  
  701.  
  702.  
  703. /* PAL oder NTSC?
  704. */
  705. void PAL_NTSC()
  706. {
  707.  if (GfxBase->DisplayFlags & NTSC) {    /*wenn NTSC, dann anpassen*/
  708.    MyScreen.Height = 200;
  709.    MyWindow.Height = 189;
  710.    border2b.NextBorder = NULL;        /*unteren Kasten weglassen*/
  711.   }
  712. }
  713.  
  714.  
  715.  
  716.  
  717. int GetParPort()                /*Druckerport belegen*/
  718. {
  719.  
  720.  parport = CreatePort(0L,0L);
  721.  if (parport == NULL)
  722.    return(-1);
  723.  
  724.  parreq = (struct IOExtPar *) CreateExtIO(parport,(long)sizeof(struct IOExtPar));
  725.  if (parreq == NULL) {
  726.    DeletePort(parport);
  727.    return(-1);
  728.   }
  729.  
  730.  if (OpenDevice((UBYTE *)"parallel.device",0L,parreq,0L)) {
  731.    DeleteExtIO(parreq,(long)sizeof(struct IOExtPar));
  732.    DeletePort(parport);
  733.    return(-1);
  734.   }
  735.  
  736.  InitParPort();                /*Datenrichtungsregister der CIAs*/
  737.                     /*initialisieren*/
  738.  return(0);
  739. }
  740.  
  741.  
  742. void FreeParPort()            /*Druckerport wieder freigeben*/
  743. {
  744.  RestoreParPort();        /*Datenrichtungsregister der CIAs restau-*/
  745.                 /*rieren, nicht aber den Zustand der Aus-*/
  746.                 /*gänge, da sonst der angeschlossene Brenner*/
  747.                 /*einen ungewollten Befehl erhalten könnte*/
  748.                 /*(Vcc on, VEdit on,...).*/
  749.  CloseDevice(parreq);        /* Port wieder freigeben */
  750.  DeleteExtIO(parreq,(long)sizeof(struct IOExtPar));
  751.  DeletePort(parport);
  752. }
  753.  
  754.  
  755. GetTimer()                /*Timer holen*/
  756. {
  757.  
  758.  timeport = CreatePort(0L,0L);
  759.  if (timeport == NULL)
  760.    return(-1);
  761.  
  762.  timereq=(struct timerequest *)AllocMem(
  763.             (long)sizeof(struct timerequest),MEMF_PUBLIC);
  764.  if (timereq == NULL) {
  765.    DeletePort(timeport);
  766.    return(-1);
  767.   }
  768.  
  769.  timereq->tr_node.io_Message.mn_Node.ln_Type=NT_MESSAGE;
  770.  timereq->tr_node.io_Message.mn_Node.ln_Pri=0;
  771.  timereq->tr_node.io_Message.mn_ReplyPort=timeport;
  772.  
  773.  if (OpenDevice(TIMERNAME,UNIT_MICROHZ,timereq,0L)) {
  774.    FreeMem(&timereq,(long)sizeof(struct timerequest));
  775.    DeletePort(timeport);
  776.    return(-1);
  777.   }
  778.  
  779.  return(0);
  780. }
  781.  
  782.  
  783. void FreeTimer()            /*Timer wieder freigeben*/
  784. {
  785.  CloseDevice(timereq);
  786.  FreeMem(timereq,(long)sizeof(struct timerequest));
  787.  DeletePort(timeport);
  788. }
  789.  
  790.  
  791. /*micro: microsec. to wait
  792.   secs: seconds to wait
  793. */
  794. void WaitForTimer(micro)
  795. ULONG micro;
  796. {
  797.  timereq->tr_node.io_Command=TR_ADDREQUEST;
  798.  timereq->tr_time.tv_secs=0;
  799.  timereq->tr_time.tv_micro=micro;
  800.  DoIO(timereq);
  801. }
  802.  
  803.  
  804.  
  805.  
  806. void OpenStuff()
  807. {
  808.  
  809.  if ((IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0L))==NULL) {
  810.    puts("can't open intuition.library!");
  811.    exit(0);
  812.   }
  813.  
  814.  if((GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0L))==NULL) {
  815.    puts("can't open graphics.library!");
  816.    CloseStuff();
  817.    exit(0);
  818.   }
  819.  PAL_NTSC();                    /*Fenstergröße usw. anpassen*/
  820.  
  821.  if ((ReqBase=(struct ReqLib *)OpenLibrary("req.library",0L))==NULL) {
  822.    puts("can't open req.library!");
  823.    CloseStuff();
  824.    exit(0);
  825.   }
  826.  
  827.  
  828.  txtattr.ta_Name  = (STRPTR)"topaz.font";        /*Font holen*/
  829.  txtattr.ta_YSize = 8;
  830.  txtattr.ta_Style = 0;
  831.  txtattr.ta_Flags = 0;
  832.  
  833.  if (!(txtfont = (struct TextFont *)OpenFont(&txtattr))) {
  834.    puts("can't find topaz.font 8!");
  835.    CloseStuff();
  836.    exit(0);
  837.   }
  838.  
  839.  
  840.  if (!(screen=(struct Screen *)OpenScreen(&MyScreen))) {
  841.    puts("can't open screen!");
  842.    CloseStuff();
  843.    exit(0);
  844.   }
  845.  
  846.  MyWindow.Screen=screen;
  847.  if ((window=(struct Window *)OpenWindow(&MyWindow))==NULL) {
  848.    puts("can't open window!");
  849.    CloseStuff();
  850.    exit(0);
  851.   }
  852.  SetMenuStrip(window,&Menu1);
  853.  
  854.  myproc     = (struct Process *)FindTask(0L);        /*Requester umleiten*/
  855.  old_ReqWin = (struct Window *)myproc->pr_WindowPtr;
  856.  myproc->pr_WindowPtr = (APTR)window;
  857.  
  858. }
  859.  
  860.  
  861.  
  862.  
  863. void CloseStuff()
  864. {
  865.  
  866.   if (ReqBase)
  867.     PurgeFiles(&MyFileReqStruct);      /*Speicher für File-Req. freigeben*/
  868.  
  869.   myproc->pr_WindowPtr=(APTR)old_ReqWin;  /*Req. auf ursprüngliches Window*/
  870.  
  871.   if (txtfont) CloseFont(txtfont);
  872.   if (window) {
  873.     ClearMenuStrip(window);
  874.     CloseWindow(window);
  875.    }
  876.   if (screen) CloseScreen(screen);
  877.   if (IntuitionBase) CloseLibrary (IntuitionBase);
  878.   if (GfxBase) CloseLibrary (GfxBase);
  879.   if (ReqBase) CloseLibrary (ReqBase);
  880.  
  881. }
  882.  
  883.  
  884.